//
//  YHKPictureView.swift
//  xinlangweiBo2
//
//  Created by 杨和逵 on 16/3/1.
//  Copyright © 2016年 yanghekui. All rights reserved.
//

import UIKit

//定义常量的时候，最好把他定义在类的外边
//定义一个间距
let ItmeMaargin:CGFloat = 10
//定义一个itemWH
let ItmeWH = (kUIScreenWidth - 4 * ItmeMaargin)/3
//标识
let CollectionViewCell = "CollectionViewCell"

class YHKPictureView: UICollectionView ,UICollectionViewDataSource {

    //原创微博使用的数据
    //赋值的时候，知道已经计算好宽高，然后再更新约束
    var homeCellViewModel:YHKHomeCellViewModel?{
        
        didSet{
            
            //更新配图的约束
            self.snp_updateConstraints { (make) -> Void in
                
//               make.size.equalTo(self.calPictureSize())
                
                let size = self.calPictureSize()
                make.width.equalTo(size.width)
                make.height.equalTo(size.height)
                
            }
            
            //赋值之后，是不是需要重新加载数据
            reloadData()
        }
    }
    
    
    //转发微博使用的数据
    //赋值的，知道已经计算好的宽高，然后再更新约束
    var pictureList: [YHKPictureViewModel]?{
        
        didSet{
            
            //更新
            self.snp_updateConstraints { (make) -> Void in
                
                let size = self.calPictureSize()
                make.width.equalTo(size.width)
                make.height.equalTo(size.height)
            }
            //赋值之后，是不是需要重新加载数据
            reloadData()
            
        }
        
    }
    
    
    
    
    
    
    let flowLayout:UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    
    //流水布局
    override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
        super.init(frame: frame, collectionViewLayout: flowLayout)
        
        //设置控件
         setUpUI()
        
        
    }

    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
   
  
    
    //写一个私有方法来设置数据
    private func setUpUI(){
        
        /*
        1.实现collectionView的数据源方法
        2.设置flowLayout 已经UICollectionView的属性
        3.显示图片 -- 自定义cell
        */
        
        //设置颜色
        backgroundColor = UIColor.whiteColor()
        
        //设置代理
        self.dataSource = self
        //注册cell
        self.registerClass(YHKPictureViewCollectionCell.self, forCellWithReuseIdentifier: CollectionViewCell)
        
        //设置水平
        flowLayout.scrollDirection = UICollectionViewScrollDirection.Horizontal
        
        //设置cell的大小
        flowLayout.itemSize = CGSizeMake(ItmeWH - 1, ItmeWH - 1)
        flowLayout.minimumInteritemSpacing = ItmeMaargin
        flowLayout.minimumLineSpacing = ItmeMaargin
    }
    
    
    
    
    
    
    
    
    
    //计算配图视图的宽高
    private func calPictureSize() -> CGSize{
    
//        需要根据图片的个数
//        let conut = homeCellViewModel?.statrsModel?.pic_urls?.count//加载原创微博
        let conut = pictureList?.count 
    
    
//        根据长度来判断他的宽高
        if conut <= 3 {
            
            //宽：itemW * 3 + 2 * itmeMargin
            //高：itemH
            
            return CGSizeMake(ItmeWH * 3  + 2 * ItmeMaargin, ItmeWH)
            
        }else if conut == 4 {
            
            //宽：itemW  * 2 + itemMargin * 2
            
            return CGSizeMake(ItmeWH * 2 + ItmeMaargin, ItmeWH * 2 + ItmeMaargin)
            
        }else{
            
            let row = CGFloat((conut! - 1)/3 + 1)
            
            return CGSizeMake(kUIScreenWidth - 2 * ItmeMaargin, (ItmeMaargin + ItmeWH) * row)
            
        }
        }

}




//代码模块化
extension YHKPictureView{
    
    //实现数据源方法
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
//        return homeCellViewModel?.statrsModel?.pic_urls?.count ?? 0
        
        return pictureList?.count ?? 0
    }
    
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(CollectionViewCell, forIndexPath: indexPath) as! YHKPictureViewCollectionCell

        
        
        ///单单设置原始图片的时候使用的数据
//        let viewModel = YHKPictureViewModel()
//        
//        viewModel.model = homeCellViewModel?.statrsModel?.pic_urls![indexPath.item]
//        
//        cell.pictureViiewModel = viewModel
        
        //使用数组中的数据
        cell.pictureViiewModel = pictureList![indexPath.item]
        
        
        return cell
    }
    
    
    
}


///自定义cell这个类
class YHKPictureViewCollectionCell:UICollectionViewCell{
    
    var pictureViiewModel:YHKPictureViewModel?{
        
        didSet{
            
            let url = NSURL(string: pictureViiewModel?.model?.thumbnail_pic ?? "")
            
            if let Ourl = url {
                
                iconImageView.sd_setImageWithURL(Ourl)
            }
        }
        
    }
    
    //创建视图三部曲
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        setUpView()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    
    private func setUpView(){
        
        addSubview(iconImageView)
        
        iconImageView.frame = self.bounds
        
    }
    
    //懒加载
    private lazy var iconImageView:UIImageView = {
    
    let icon = UIImageView()
    
    return icon
    }()
    
    
}











